var uuid = require('uuid');

var util = require('../libs/util');
var User = require('../service/user');
var Token = require('../service/token');

/**
 * 登陆
 **/
exports.login = function (req, res, next) {
    req.checkBody('username', '用户名不能为空。').notEmpty();
    req.checkBody('password', '密码不能为空。').notEmpty();
    var username = req.body.username;
    var password = util.md5(req.body.password);

    var errors = req.validationErrors();
    if (errors) {
        return res.status(400).json(errors);
    }

    User.getUserByUsername(username, function(err, user){
        if(err) return next(err);
        if(!user) return res.status(400).json({msg: '用户名或密码错误。'});
        if(password !== user.password) {
            return res.status(400).json({msg: '用户名或密码错误。'});
        }

        var accessToken = uuid.v4();
        Token.createToken(accessToken, user._id, function(err, token){
            if(err) return next(err);
            res.json({accessToken: token.access_token});
        });
    })
}

/**
 * 注册
 **/
exports.signup = function (req, res, next) {
    req.checkBody('username', '用户名不能为空。').notEmpty();
    req.checkBody('password', '密码不能为空。').notEmpty();
    var errors = req.validationErrors();
    if (errors) {
        return res.status(400).json(errors);
    }
    
    var username = req.body.username;
    var password = util.md5(req.body.password);

    var errors = req.validationErrors();
    if (errors) {
        return res.status(400).json(errors);
    }

    User.createUser(username, password, function(err, user){
        if(err) return next(err);

        var accessToken = uuid.v4();
        Token.createToken(accessToken, user._id, function(err, token){
            if(err) return next(err);
            res.json({accessToken: token.access_token});
        });
    })
}

/**
 * 退出
 **/
exports.signout = function (req, res, next) {
    var accessToken = req.query.access_token;
    if(accessToken) {
        // 删除token
        Token.destory(accessToken, function(err){
        })
    }

    return req.json({msg: '操作成功。'});
};
